/**
 *  Universidad del Valle de Guatemala
 *  Sección 20 Algoritmos y Estructuras de Datos
 *  Rudy Hernandez
 *  Diego Garcia
 *  Rodrigo Avelar 
 *  Esta clase simula una radio de un carro. Aqui se implementan los
 *    metodos de la interfaz Radio. Esta radio es capaz de cambiar de banda,
 *    estación así como también permite almacenar 12 estaciones.
 */
public class RadioCarro implements Radio {

    
    // Atributos
    private boolean encendido; // ON = TRUE ; OFF = FALSE
    private boolean banda;  // AM = TRUE ; FM = FALSE 
    private int estacionesAM [];
    private int estacionAM;
    private float estacionesFM [];
    private float estacionFM;
    
    /**
     * Constructor de la clase para inicializar los atributos 
     * que se utilizan en la clase
     */
    public RadioCarro(){
        encendido = false;
        banda = true;
        estacionAM = AM_MIN;
        estacionFM = FM_MIN;
        estacionesAM = new int [12];
        estacionesFM = new float [12];
        for(int i = 0; i<12; i++){
            estacionesAM [i] = AM_MIN;   // se inicializan las listas que almacenan las estaciones
            estacionesFM [i] = FM_MIN;
        }
    }
    
    /**
     * Este metodo sirve para apagar o encender el radio
     */
    @Override
    public void onOff() {
        encendido = !encendido;
    }

    /**
     * Este metodo  sirve para cambiar la banda dentro del radio
     */
    @Override
    public void cambiarBanda() {
        banda = !banda;
    }

    /**
     * En este metodo se cambia la frecuencia del radio. Al llegar a la 
     * frecuencia maxima, la frecuencia retorna al valor mínimo de la 
     * frecuencia en la banda selectionada
     */
    @Override
    public void cambiarFrecuencia() {
        if(banda){
            estacionAM += AM_D;
            if(estacionAM>AM_MAX)
                estacionAM = AM_MIN;
            }
        else{
            estacionFM += FM_D;
            if(estacionFM>FM_MAX)
                estacionFM = FM_MIN;
            }                
    }
    
    /**
     * Este metodo sirve para almacenar la estacion en que se encuentra el radio
     * @param boton que identifica el lugar en donde se va almacenar la estacion 
     */
    @Override
    public void guardarEstacion(int boton) {
        if(banda){
            estacionesAM[boton-1] = estacionAM;
        }
        else{
            estacionesFM[boton-1] = estacionFM;
        }
    }
    
    /**
     * En este metodo se selecciona una estacion almacenada previamente.
     * @param boton que identifica el lugar de almacenamiento de la estacion a seleccionar
     */
    @Override
    public void seleccionarEstacion(int boton) {
        if(banda){
            estacionAM = estacionesAM[boton-1];
        }
        else{
            estacionFM = estacionesFM[boton-1];
        }
    }

    /**
     * Este metodo sirve para conocer el numero de frecuencia en que se encuentra
     * el radio.
     * @return el numero de frecuencia en que se encuentra el radio
     */
    @Override
    public float getFrecuencia() {
        if(banda){
            return estacionAM;
        }
        else{
            return estacionFM;
        }
    }

    /**
     * Este metodo verifica en qué estado se encuentra el radio, apagado o encendido
     * @return true si esta encendido o false si esta apagado
     */
    @Override
    public boolean isOn() {
        return encendido;
    }

    /**
     * En este metodo se verifica si la banda se encuentra en AM
     * @return ture si la radio esta en AM o false si esta en FM
     */
    @Override
    public boolean isAM() {
        if (banda){
            return true;
        }
        else{
            return false;
        }
    }
    /**
     * En este metodo se verifica si la banda se encuentra en FM
     * @return true si la radio esta en FM o false si esta en AM 
     */
    @Override
    public boolean isFM() {
        if (!banda){
            return true;
        }
        else{
            return false;
        }
    }
    
}
